/*
 * @Descripttion: 
 * @version: 
 * @Author: sueRimn
 * @Date: 2025-07-29 21:55:21
 * @LastEditors: sueRimn
 * @LastEditTime: 2025-07-30 20:47:53
 */
#ifndef _KEY_H
#define _KEY_H

#include "stm32f4xx_hal.h"
#include "gpio.h"

#define KEY_SHORT_MIN_TIME 50 //短按最短时间 没有超过该时间的判断为抖动 不执行按键操作

typedef struct _dev_key
{
    GPIO_TypeDef *pstGpioPort;
    uint16_t usGpioPin;

    uint32_t uiDownTime;//按键按下时刻的时间 单位 ms
    uint32_t uiLongTime;//长按时间阈值  单位 ms

    uint8_t ucLastStat;//上一次状态

    void (*key_down)(void *param);
    void (*key_short)(void *param);
    void (*key_long)(void *param);

    void *param;

    struct _dev_key *pstNextKey;

}dev_key;

typedef  dev_key* dev_key_t;

void key_run(void);
void key_init(void);
#endif
